<?php
ob_start("ob_gzhandler");

require_once(BaseConfig::LoadClass('vars.class.php'         ));
require_once(BaseConfig::LoadClass('sesion.class.php'       ));
require_once(BaseConfig::LoadClass('template.class.php'     ));
require_once(BaseConfig::LoadClass('usuario.class.php'      ));
require_once(BaseConfig::LoadClass('configuracion.class.php'));
require_once(BaseConfig::LoadClass('permiso.class.php'      ));
require_once(BaseConfig::LoadClass('menu.class.php'         ));
require_once(BaseConfig::LoadClass('pagina.class.php'       ));
require_once(BaseConfig::LoadClass('menu_lateral.class.php' ));

require_once(BaseConfig::LoadClass('sitio.class.php'        ));
require_once(BaseConfig::LoadClass('sitio_local.class.php'  )); // Sitio_local debe ir despues de sitio Y de pagina

$oConfiguracion = new Config    ();
$oTemplate      = new Template  ();
$oSesion        = new Sesion    ();
$oSitio         = new SitioLocal();
$strPagina      = '';

if($oConfiguracion->Get('log_solo_https', '0') == '1') {
  if(!isset($_SERVER['HTTPS'])) {
    die('Solo se puede accesar al sistema por HTTPS');
  }
}

if(!$oSesion->oUsuario->intIdUsuario) {
  // No está logueado, necesita loguearse
  // Checar si lo que está pasando es un logueo
  if(Variables::GetPageOption() == 'login') {
    $intIdLogin = $oSesion->Login($_POST['usuario'], $_POST['password']);
    if($intIdLogin > 0) {
      // Se logueó correctamente
      $oSesion->oUsuario->CambiarLastLog();
      header('Location: index.php');
      die;
    } else {
      // No se logueó correctamente.
      // El proceso es el mismo, pero se aparta para claridad
      header('Location: index.php?fail=' . ($intIdLogin * -1));
      die;
    }
  } else {
    if($bolGGuestAbled && (Variables::GetPageOption() != 'entrar')) {
      // Pueden entrar como invitados
    } else {
      $strRazon        = "";
      $strExtraMensaje = "";
      $strNombreSitio  = $oConfiguracion->Get('nombre_sitio', 'Sin titulo (Provisional)');

      $strExtraFiles = $oTemplate->GetExtraFiles();
      eval('$strPagina = "' . $oTemplate->Get('login.tpl.php') . '";');
      echo $strPagina;
      die;
    }
  }
}

/**
 * Arreglo que indica cuales operaciones son solo aplicables a administrador
 */
$arrOpcionesExclusivasAdministrador = Array();
//$arrOpcionesExclusivasAdministrador[] = 'servidores';

if($oSesion->oUsuario->strTipo != "Admin") {
  if(in_array(Variables::GetPageOption(), $arrOpcionesExclusivasAdministrador)) {
    header('Location: index.php?option=sin_permiso');
    die;
  }
}

$strTemplate = 'default.tpl.php';

$arrOpcionesPosibles = Permiso::ObtenerPermisosPosibles();
$arrOpcionesUsuario  = Permiso::ObtenerPermisosUsuario ($oSesion->oUsuario->intIdUsuario);

if(isset($arrOpcionesPosibles[Variables::GetPageOption()])) {
  if(!in_array(Variables::GetPageOption(), $arrOpcionesUsuario)) {
    header('Location: index.php?option=sin_permiso');
    die;
  }
}

switch (Variables::GetPageOption()) {
  case "info":
    phpinfo();
    die;
    break;
  case "test":
    break;
  case 'theme_showcase': // *[9] Showcase del tema
    if(Variables::GetOption('empty')) {
      $strTemplate = 'vacia_con_bordes.tpl.php';
    }
    eval('$strPagina .= "' . $oTemplate->Get('theme_showcase.tpl.php') . '";');
    break;



  case 'guardar_permisos': // *Asignar permisos a usuario
    $oUsuario = new Usuario(Variables::GetOption('id'));
    Permiso::GuardarPermisos(Variables::GetOption('id'), $_POST['permisos']);
    header('Location:index.php?option=usuarios');
    die;
    break;
  case 'usuarios': // *[0] Usuarios
    $strPagina = Usuario::PaginaEdicion(Variables::GetOption('pagina') - 0);
    break;
  case 'cpu1': // -[0] Edicion del password propio
    if((Variables::GetOption('extra') == "ajale") && (Variables::GetOption('pass') != "")) {
      $oUsuario = new Usuario($oSesion->oUsuario->intIdUsuario);
      $oUsuario->strPass = Variables::GetOption('pass');
      $strConsulta = $oUsuario->CambiarPass();
      header('Location:index.php?option=cpu1&msg=El%20password%20se%20cambio%20correctamente');
      die;
    }
    if(!isset($_GET["msg"])) {
      $_GET["msg"] = "";
    }
    $strPagina = $oTemplate->FillWithArray('cambio_pass_propio.tpl.php', $_GET);
    break;
  case 'cp': // *Edicion de password de cualquier usuario
    $oUsuario = new Usuario(Variables::GetOption('id'));
    $oUsuario->strPass = Variables::GetOption('pass');
    $strConsulta = $oUsuario->CambiarPass();
    header('Location:index.php?option=usuarios');
    die;
    break; //                                              009cd4     ee7d2b
  case 'cambio_usuario': // *Creacion y edicion de usuarios
    $oUsuario = new Usuario($_POST['usuario']['id_usuario']);
    $oUsuario->LlenarObjeto($_POST['usuario']);
    if($_POST['usuario']['id_usuario'] == 0) {
      $oUsuario->strPass = $_POST['usuario']['pass'];
      $oUsuario->dteLastChangePass = date("Y-m-d H:i:s");
    }
    $strConsulta = $oUsuario->GuardarObjeto();
    header('Location:index.php?option=usuarios');
    die;
    break;



  case 'configuracion': // *[0] Edicion de la configuracion
    if(Variables::GetOption('guardar') == '1') {
      $oSitio->GuardarConfiguracion();
      header('Location:index.php?option=configuracion');
      die;
    }
    $strPagina = $oSitio->PaginaEdicion();
    break;
  case 'tabla_a_clase': // *[9] Transformar tabla a Clase
    $strPagina = $oSitio->TablaAClase();
    break;
  case 'edicion_menu': // *[9] Edicion del Menu
    $strPagina = $oSitio->EdicionMenu();
    break;
    
    
    
  case "select_image":
    require_once($strGBaseDirTop . "/select_image.inc.php");
    die;
    break;
  case "jsvars":
    echo "var glPath  = '" . str_replace("\\", "/", $strGPath      ) . "';\n";
    echo "var glPathP = '" . str_replace("\\", "/", $strGPathP     ) . "';\n";
    echo "var glUrlP  = '" . str_replace("\\", "/", $strGUrlP      ) . "';\n";
    echo "var glUrl   = '" . str_replace("\\", "/", $strGUrl       ) . "';\n";
    echo "var glUrlB  = '" . str_replace("\\", "/", $strGUrlBaseSis) . "';\n";
    echo "var glHost  = '" . str_replace("\\", "/", $strGHost      ) . "';\n";
    die;


  case "sin_permiso":
    $strPagina = "<h1>No tiene permisos para hacer esa operaci&oacute;n</h1>";
    break;
  case "salir": // +[0] Salir
    $oSesion->Logout();
    header('Location:index.php');
    die;
    break;
  default:
    // Por si no existe una pagina, se muestra el mensaje por default
    global $strGPath;
    require_once($strGPath . '/controller.inc.php');
    
    // Si regresa vacia, es hora de usar el plugin de pagina para intentar sacar el contenido
    if($strPagina == "") {
      $strPagina = Pagina::DoRenderPage();
    }
    break;
}

echo $oSitio->Renderear($strPagina, "", $strTemplate);
if(isset($bolGDebug) && $bolGDebug) {
  echo "<br>" . Variables::DebugInfo();
}
ob_end_flush();
?>
